Conversation
Unify all execution state changes through ExecutionEventBus as the single source of truth, eliminating the half-migration state where DB direct writes, event bus, and WS broadcast coexisted. - Add canonical ExecutionEventType enum, remove dual event naming compat - Convert mark_status() and orchestrator._status() to publish events instead of direct DB writes; StateTransitionSubscriber handles transitions - Remove ThreadMessage direct-write path (POST /messages endpoint) - Remove run-centric code: run_reducers, /runs pages, skill creator run hooks - Move formatRelativeTime to shared dateHelpers utility Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ent execution subscription event protocols
- Eliminate double-read in mark_status(): only query execution row when no event context is injected (reaper fallback path) - Remove unnecessary FOR UPDATE lock in non-terminal status transitions (Phase 1 subscribers already run sequentially in a single transaction) - Extract _envelope() helper in orchestrator._wire_context to deduplicate envelope construction across _emit/_status/_complete callbacks - Remove unused user_id parameter from mark_status() - Remove redundant created_at=utc_now() where dataclass default suffices - Trim verbose docstring on ExecutionEventEnvelope Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… sections to prevent nested interactive elements
- Consolidate workspace-wide settings (Members, Models, Sandboxes, Tokens) into /settings hub with a dedicated sidebar layout. - Simplify personal account settings in the avatar menu modal. - Add automatic redirection from /settings to default sub-pages.
… to version-based architecture
Delete graphs.ts and LoadModal.tsx entirely. Migrate AgentBuilder, BuilderToolbar,
SaveManager, Copilot hooks, and CodeEditor to use version-based endpoints
(agents/{id}/versions/{vid}). Fix sendBeacon to use fetch+keepalive with PATCH
method matching the backend route. Clean up dead state, dynamic imports, circular
dependency hacks, and stale comments found during code review.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 'pending' state was defined in the state machine but never written by any code path — ORM default and service both go straight to 'ready'. Drop it to eliminate the vocabulary mismatch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…itecture
Delete the legacy execution types/service/hooks that expected a flat Execution
model with workspace_id/task_id/agent_profile_id. The Executions page now
displays AgentRun list via the existing agentRun infrastructure, with cancel
delegated to POST /v1/runs/{id}/cancel.
Backend: fix execution_service.mark_status fallback referencing non-existent
Execution.workspace_id (JOIN through agent_runs instead), and fix
coordinator_tools.spawn_agent creating orphan Executions without run_id
(now creates AgentRun first, matching the orchestrator pattern).
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
…ture Implements two new execution engines following the ExecutionEngine protocol: - CodeEngine: executes user Python code by extracting a StateGraph via execute_code() sandbox, compiling, and streaming results - CopilotEngine: wraps CopilotService streaming and persists copilot events as ExecutionEvents through the event bus Adds dispatch_copilot() to ExecutionOrchestrator with engine override mechanism, POST /v1/copilot/run endpoint, copilot event types, and frontend execution bridge hook for copilot UI integration. Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
…yout CodeEditorPage is now a self-contained page (parallel to AgentBuilder) with its own toolbar (Save + Deploy + Run/Stop), execution panel, and run input modal — matching the graph builder UX without coupling. - Enable code option in agent creation and version forms - Show Builder tab for code-mode agents in layout and overview - Add Deploy button that publishes with runtime_kind="code" - Wire Run/Stop to executionStore.startExecution() for execution panel - Simplify CodeEditorToolbar to save-only (run/deploy moved to page) - deploymentAdapter.deploy() accepts optional runtimeKind parameter Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
- Delete unused CodeEditorToolbar (dead code after page refactor) - Remove unused imports: Input, useAgent, useRef from CodeEditorPage - Use individual Zustand selectors instead of bare destructure to prevent re-renders on every execution event - Remove WHAT comments from JSX - Extract hasBuilderSupport() helper to deduplicate definition_kind checks in layout.tsx and agent-overview-tab.tsx Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
- AgentBuilder now checks version.definition_kind instead of variables.graph_mode to decide CodeEditorPage vs canvas - useVersionGraphState returns definitionKind from the version - Slug generation auto-appends suffix on conflict instead of erroring Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
… new execution architecture Copilot was still using the old runService (agent_name + graph_id + message) against a backend that only accepts the new AgentRun schema (release_id + trigger_source + goal). All old endpoints (/snapshot, /events, /active, /ws/runs) were 404s. This rewires the entire Copilot chain to use the already-existing POST /v1/copilot/run → ExecutionOrchestrator.dispatch_copilot → execution_event_bus → /ws/executions → useCopilotExecutionBridge pipeline. - Fix WS field inconsistency: WebSocketSubscriber "data" → "payload" - Add agent_id/trigger_source/status filters to GET /v1/runs - Add "copilot" to TriggerSourceLiteral - Rewrite useCopilotActions to dispatch via copilotService.dispatchRun - Activate useCopilotExecutionBridge in CopilotPanel (closes event loop) - Rewrite useCopilotEffects for session restore via agentRunService - Consolidate executionAdapter to delegate to agentRunService - Delete runService.ts, runWsClient, test_runs_api.py and all dead code Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
- Add use-execution-stream.ts to WS protocol task (was missing onStatus→onCompleted) - Fix route targets: /tasks for param links, /dashboard for back nav only - Add 'artifact' to ExecutionStepType union - Add getWsChatUrl cleanup to dead code deletion task - Simplify component dedup to pure deletion (no imports reference it) Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…docstring Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
…stream endpoint Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
…, remove phantom execution_status Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
…dlers, remove old pipeline Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…ter, eventProcessor, getWsChatUrl Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
…n engine_kind Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
…w 404 Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
Fixes from spec review: 1. Rename ChatMessage → ConversationMessage to avoid name collision with existing ChatMessage in openclaw_chat.py and code_agent/memory.py 2. Add StagedUpload table to bridge file upload (sandbox path) → chat attachment (UUID reference) gap 3. Specify seq generation strategy with SELECT FOR UPDATE locking 4. Add full MessageProjectionSubscriber event→message mapping table 5. Update dispatch_chat signature to accept attachment_ids Also: remove preview_ready (compute on-the-fly), add updated_at column, note max_length change from 4000→10000, clarify ChatResponse schema disambiguation. Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
Previous versions designed new tables (conversation_messages,
message_attachments, staged_uploads) — wrong direction. ExecutionEvent
is already the source of truth for all conversation content.
New design:
- Zero new tables
- Delete ThreadMessage + MessageProjectionSubscriber (redundant projection)
- One new endpoint: GET /v1/threads/{id}/events (aggregation query)
- Extend ChatRequest with attachments (metadata in USER_MESSAGE payload)
- Frontend ChatPanel is a view layer over execution events
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
1. Pagination: after_seq → cursor-based (event_id), since sequence_no resets per execution 2. Attachment payload construction: in router not dispatch_chat, with exact code location reference (threads.py lines 185-195) 3. max_length 4000→10000 explicitly called out as intentional 4. ThreadDetailResponse added to deletion scope (embeds MessageResponse) Also: copilot_* filtered server-side, authorization documented, file preview raw-mode code path detailed. Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
…, fix Date.now consistency - Remove duplicate generateId import (genId alias) - Remove redundant clearInterrupts() before updateGraphState that already clears - Capture Date.now() once in onCompleted for consistent endTime/duration - Switch if/if/if to switch in handleMessage hot path - Add payload.delta/content fallback for assistant_text events - Remove WHAT comments, keep only WHY comments Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…tation and observation tests
…machine centralization, and OTel-backed observation tracking
…point to /ws/executions
…by introducing build_copilot engine kind and updating task status logic.
… default redirection path to /dashboard
Replaces confusing DefinitionKindLiteral/RuntimeKindLiteral/executor_kind with two clean orthogonal axes: EngineKind (what kernel) and RuntimeKind (where it runs). Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
10-task plan covering contracts, engine registry, models, schemas, services, migration, frontend types and components. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…eKind/RuntimeKind in contracts
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…_kind in models Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…consolidate overrides Fixes missed files (schemas/execution, services/agent_service, agent_version_service, execution_service, frontend execution page) and consolidates executor_kind_override into engine_kind_override in the orchestrator. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Replaces TriggerSourceLiteral with two orthogonal axes: - TriggerMediumLiteral: how the run was triggered (api, scheduler, system, ui) - RunPurposeLiteral: why the run exists (production, draft_test, debug, internal_builder) Updates contracts, models, schemas, repositories, services, and API layer. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…e_kind refactors - 1a2b3c4d5e6f: unify agent_run metadata (trigger_source → trigger_medium + run_purpose) - b2af1f3e0215: refactor agent kinds (definition_kind → engine_kind, executor_kind → engine_kind) Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Removes deprecated assignee_type/assignee_id aliases and TERMINAL_TASK_STATUSES export from frontend task types. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…frontend Renames trigger_source to trigger_medium/run_purpose in: - execution_runner.py EventContext construction - coordinator_tools.py sub-run creation - execution_service.py envelope construction (5 occurrences) - agentRunService.ts list params - useCopilotEffects.ts copilot session restore - executionAdapter.ts run creation Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…timize metadata migration scripts
…d overhaul observation processing systems
…tend state management
…ontext wiring, and fix React hook dependencies and rendering logic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.